libc: Move setjmp to libc folder
authorAntonio Nino Diaz <[email protected]>
Fri, 8 Feb 2019 13:20:37 +0000 (13:20 +0000)
committerAntonio Nino Diaz <[email protected]>
Fri, 8 Feb 2019 13:42:38 +0000 (13:42 +0000)
Now that setjmp() and longjmp() are compliant with the standard they can
be moved with the other libc files.

Change-Id: Iea3b91c34eb353ace5e171e72f331602d57774d5
Signed-off-by: Antonio Nino Diaz <[email protected]>
bl31/bl31.mk
include/arch/aarch64/setjmp.h [deleted file]
include/lib/libc/aarch64/setjmp_.h [new file with mode: 0644]
include/lib/libc/setjmp.h [new file with mode: 0644]
lib/aarch64/setjmp.S [deleted file]
lib/libc/aarch64/setjmp.S [new file with mode: 0644]
lib/libc/libc.mk
make_helpers/build_macros.mk

index 89f5896ac0fc3387762eb0dfdd9556cd13c73f68..c9ba926c591f2ae2645eaf9da6445827a4cf54f6 100644 (file)
@@ -31,7 +31,6 @@ BL31_SOURCES          +=      bl31/bl31_main.c                                \
                                bl31/aarch64/runtime_exceptions.S               \
                                bl31/bl31_context_mgmt.c                        \
                                common/runtime_svc.c                            \
-                               lib/aarch64/setjmp.S                            \
                                lib/cpus/aarch64/dsu_helpers.S                  \
                                plat/common/aarch64/platform_mp_stack.S         \
                                services/arm_arch_svc/arm_arch_svc_setup.c      \
diff --git a/include/arch/aarch64/setjmp.h b/include/arch/aarch64/setjmp.h
deleted file mode 100644 (file)
index f7991fd..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 2018-2019, ARM Limited and Contributors. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#ifndef SETJMP_H
-#define SETJMP_H
-
-#define JMP_CTX_X19    0x0
-#define JMP_CTX_X21    0x10
-#define JMP_CTX_X23    0x20
-#define JMP_CTX_X25    0x30
-#define JMP_CTX_X27    0x40
-#define JMP_CTX_X29    0x50
-#define JMP_CTX_SP     0x60
-#define JMP_CTX_END    0x70 /* Aligned to 16 bytes */
-
-#define JMP_SIZE       (JMP_CTX_END >> 3)
-
-#ifndef __ASSEMBLY__
-
-#include <cdefs.h>
-#include <stdint.h>
-
-/* Jump buffer hosting x18 - x30 and sp_el0 registers */
-typedef uint64_t jmp_buf[JMP_SIZE] __aligned(16);
-
-int setjmp(jmp_buf env);
-__dead2 void longjmp(jmp_buf env, int val);
-
-#endif /* __ASSEMBLY__ */
-#endif /* SETJMP_H */
diff --git a/include/lib/libc/aarch64/setjmp_.h b/include/lib/libc/aarch64/setjmp_.h
new file mode 100644 (file)
index 0000000..174b3eb
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2018-2019, ARM Limited and Contributors. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef SETJMP__H
+#define SETJMP__H
+
+#define JMP_CTX_X19    0x0
+#define JMP_CTX_X21    0x10
+#define JMP_CTX_X23    0x20
+#define JMP_CTX_X25    0x30
+#define JMP_CTX_X27    0x40
+#define JMP_CTX_X29    0x50
+#define JMP_CTX_SP     0x60
+#define JMP_CTX_END    0x70 /* Aligned to 16 bytes */
+
+#define JMP_SIZE       (JMP_CTX_END >> 3)
+
+#ifndef __ASSEMBLY__
+
+#include <cdefs.h>
+
+/* Jump buffer hosting x18 - x30 and sp_el0 registers */
+typedef uint64_t jmp_buf[JMP_SIZE] __aligned(16);
+
+#endif /* __ASSEMBLY__ */
+
+#endif /* SETJMP__H */
diff --git a/include/lib/libc/setjmp.h b/include/lib/libc/setjmp.h
new file mode 100644 (file)
index 0000000..5661201
--- /dev/null
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2018-2019, ARM Limited and Contributors. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef SETJMP_H
+#define SETJMP_H
+
+#include <setjmp_.h>
+
+#ifndef __ASSEMBLY__
+
+#include <cdefs.h>
+
+int setjmp(jmp_buf env);
+__dead2 void longjmp(jmp_buf env, int val);
+
+#endif /* __ASSEMBLY__ */
+#endif /* SETJMP_H */
diff --git a/lib/aarch64/setjmp.S b/lib/aarch64/setjmp.S
deleted file mode 100644 (file)
index 9d9eb49..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 2018-2019, ARM Limited and Contributors. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#include <asm_macros.S>
-#include <assert_macros.S>
-#include <setjmp.h>
-
-       .globl  setjmp
-       .globl  longjmp
-
-/*
- * int setjmp(jmp_buf env);
- */
-func setjmp
-       mov     x7, sp
-
-       stp     x19, x20, [x0, #JMP_CTX_X19]
-       stp     x21, x22, [x0, #JMP_CTX_X21]
-       stp     x23, x24, [x0, #JMP_CTX_X23]
-       stp     x25, x26, [x0, #JMP_CTX_X25]
-       stp     x27, x28, [x0, #JMP_CTX_X27]
-       stp     x29, x30, [x0, #JMP_CTX_X29]
-       stp     x7, xzr, [x0, #JMP_CTX_SP]
-
-       mov     x0, #0
-       ret
-endfunc setjmp
-
-
-/*
- * void longjmp(jmp_buf env, int val);
- */
-func longjmp
-       ldp     x7, xzr, [x0, #JMP_CTX_SP]
-
-#if ENABLE_ASSERTIONS
-       /*
-        * Since we're unwinding the stack, assert that the stack being reset to
-        * is shallower.
-        */
-       mov     x19, sp
-       cmp     x7, x19
-       ASM_ASSERT(ge)
-#endif
-
-       ldp     x19, x20, [x0, #JMP_CTX_X19]
-       ldp     x21, x22, [x0, #JMP_CTX_X21]
-       ldp     x23, x24, [x0, #JMP_CTX_X23]
-       ldp     x25, x26, [x0, #JMP_CTX_X25]
-       ldp     x27, x28, [x0, #JMP_CTX_X27]
-       ldp     x29, x30, [x0, #JMP_CTX_X29]
-
-       mov     sp, x7
-
-       ands    x0, x1, x1 /* Move val to x0 and set flags */
-       cinc    x0, x0, eq /* If val is 0, return 1 */
-       ret
-endfunc longjmp
diff --git a/lib/libc/aarch64/setjmp.S b/lib/libc/aarch64/setjmp.S
new file mode 100644 (file)
index 0000000..9d9eb49
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2018-2019, ARM Limited and Contributors. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include <asm_macros.S>
+#include <assert_macros.S>
+#include <setjmp.h>
+
+       .globl  setjmp
+       .globl  longjmp
+
+/*
+ * int setjmp(jmp_buf env);
+ */
+func setjmp
+       mov     x7, sp
+
+       stp     x19, x20, [x0, #JMP_CTX_X19]
+       stp     x21, x22, [x0, #JMP_CTX_X21]
+       stp     x23, x24, [x0, #JMP_CTX_X23]
+       stp     x25, x26, [x0, #JMP_CTX_X25]
+       stp     x27, x28, [x0, #JMP_CTX_X27]
+       stp     x29, x30, [x0, #JMP_CTX_X29]
+       stp     x7, xzr, [x0, #JMP_CTX_SP]
+
+       mov     x0, #0
+       ret
+endfunc setjmp
+
+
+/*
+ * void longjmp(jmp_buf env, int val);
+ */
+func longjmp
+       ldp     x7, xzr, [x0, #JMP_CTX_SP]
+
+#if ENABLE_ASSERTIONS
+       /*
+        * Since we're unwinding the stack, assert that the stack being reset to
+        * is shallower.
+        */
+       mov     x19, sp
+       cmp     x7, x19
+       ASM_ASSERT(ge)
+#endif
+
+       ldp     x19, x20, [x0, #JMP_CTX_X19]
+       ldp     x21, x22, [x0, #JMP_CTX_X21]
+       ldp     x23, x24, [x0, #JMP_CTX_X23]
+       ldp     x25, x26, [x0, #JMP_CTX_X25]
+       ldp     x27, x28, [x0, #JMP_CTX_X27]
+       ldp     x29, x30, [x0, #JMP_CTX_X29]
+
+       mov     sp, x7
+
+       ands    x0, x1, x1 /* Move val to x0 and set flags */
+       cinc    x0, x0, eq /* If val is 0, return 1 */
+       ret
+endfunc longjmp
index 1276f5c82b8bae2e9925f02beff0c81b484b22d5..e1b5560f844a5653e45fca7c1f83ea8157a54587 100644 (file)
@@ -1,10 +1,10 @@
 #
-# Copyright (c) 2016-2018, ARM Limited and Contributors. All rights reserved.
+# Copyright (c) 2016-2019, ARM Limited and Contributors. All rights reserved.
 #
 # SPDX-License-Identifier: BSD-3-Clause
 #
 
-LIBC_SRCS      :=      $(addprefix lib/libc/,  \
+LIBC_SRCS      :=      $(addprefix lib/libc/,          \
                        abort.c                         \
                        assert.c                        \
                        exit.c                          \
@@ -25,5 +25,10 @@ LIBC_SRCS    :=      $(addprefix lib/libc/,  \
                        strnlen.c                       \
                        strrchr.c)
 
+ifeq (${ARCH},aarch64)
+LIBC_SRCS      +=      $(addprefix lib/libc/aarch64/,  \
+                       setjmp.S)
+endif
+
 INCLUDES       +=      -Iinclude/lib/libc              \
                        -Iinclude/lib/libc/$(ARCH)      \
index 73b84c38a3988f776a474b514db6360db445c06f..4a264d7eeb64fc7314b7914da1ae54b539198218 100644 (file)
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2015-2018, ARM Limited and Contributors. All rights reserved.
+# Copyright (c) 2015-2019, ARM Limited and Contributors. All rights reserved.
 #
 # SPDX-License-Identifier: BSD-3-Clause
 #
@@ -206,6 +206,22 @@ $(OBJ): $(2) $(filter-out %.d,$(MAKEFILE_LIST)) | lib$(3)_dirs
 
 endef
 
+# MAKE_S_LIB builds an assembly source file and generates the dependency file
+#   $(1) = output directory
+#   $(2) = source file (%.S)
+#   $(3) = library name
+define MAKE_S_LIB
+$(eval OBJ := $(1)/$(patsubst %.S,%.o,$(notdir $(2))))
+$(eval DEP := $(patsubst %.o,%.d,$(OBJ)))
+
+$(OBJ): $(2) $(filter-out %.d,$(MAKEFILE_LIST)) | lib$(3)_dirs
+       $$(ECHO) "  AS      $$<"
+       $$(Q)$$(AS) $$(ASFLAGS) $(MAKE_DEP) -c $$< -o $$@
+
+-include $(DEP)
+
+endef
+
 
 # MAKE_C builds a C source file and generates the dependency file
 #   $(1) = output directory
@@ -263,7 +279,7 @@ $(1): $(2) $(filter-out %.d,$(MAKEFILE_LIST)) | bl$(3)_dirs
 
 endef
 
-# MAKE_LIB_OBJS builds both C source files
+# MAKE_LIB_OBJS builds both C and assembly source files
 #   $(1) = output directory
 #   $(2) = list of source files
 #   $(3) = name of the library
@@ -272,6 +288,10 @@ define MAKE_LIB_OBJS
         $(eval REMAIN := $(filter-out %.c,$(2)))
         $(eval $(foreach obj,$(C_OBJS),$(call MAKE_C_LIB,$(1),$(obj),$(3))))
 
+        $(eval S_OBJS := $(filter %.S,$(REMAIN)))
+        $(eval REMAIN := $(filter-out %.S,$(REMAIN)))
+        $(eval $(foreach obj,$(S_OBJS),$(call MAKE_S_LIB,$(1),$(obj),$(3))))
+
         $(and $(REMAIN),$(error Unexpected source files present: $(REMAIN)))
 endef